www.gusucode.com > VC++ 同学录信息管理系统源代码-源码程序 > VC++ 同学录信息管理系统源代码-源码程序/code/MyRecordSet.cpp
// MyRecordSet.cpp: implementation of the MyRecordSet class. // Download by http://www.NewXing.com ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Mates.h" #include "MyRecordSet.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// MyRecordSet::MyRecordSet() { isConn=false; isOpen=false; nFieldRows=0; nFieldCols=0; try { m_pConn.CreateInstance(__uuidof(Connection)); m_pRst.CreateInstance(__uuidof(Recordset)); } catch(...) {} } MyRecordSet::~MyRecordSet() { if(isOpen) m_pRst->Close(); if(isConn) m_pConn->Close(); } bool MyRecordSet::ADOOpen(CString strDataType){ m_strDBType=strDataType; return ADOOpen(); } bool MyRecordSet::ADOOpen() { ADOConnectionClose(); isConn=false; try{ m_pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=classmate.mdb","","",-1); m_pRst->CursorLocation = adUseClient; isConn=true; } catch(...) { AfxMessageBox("与数据建立连接失败!"); } return isConn; } bool MyRecordSet::ADOExcute(CString strSQL) { m_strSQL=strSQL; return ADOExcute(); } int MyRecordSet::ADOExcuteNoQuery(CString strSQL) { _variant_t var; _bstr_t sql=strSQL; try { m_pConn->Execute(sql,&var,adCmdText); return (int)V_I2(&var); } catch(...) { return 0; } } bool MyRecordSet::ADOExcute() { _variant_t sql=m_strSQL; nFieldRows=0; nFieldCols=0; ADOClose(); isOpen=false; try { m_pRst->Open(sql,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); if(m_pRst->State) { nFieldRows=m_pRst->RecordCount; nFieldCols=m_pRst->GetFields()->GetCount(); isOpen=true; } } catch(...) {} return isOpen; } void MyRecordSet::ADOClose() { if(isOpen) { m_pRst->Close(); isOpen=false; } } void MyRecordSet::ADOConnectionClose() { ADOClose(); if(isConn) { m_pConn->Close(); isConn=false; } } bool MyRecordSet::ADOEOF() { if(isConn&&isOpen) return m_pRst->adoEOF; return true; } HRESULT MyRecordSet::MoveFirst() { return m_pRst->MoveFirst(); } HRESULT MyRecordSet::MoveLast() { return m_pRst->MoveLast(); } HRESULT MyRecordSet::MovePrev() { return m_pRst->MovePrevious(); } HRESULT MyRecordSet::MoveNext() { return m_pRst->MoveNext(); } CString MyRecordSet::GetFieldName(int nCol) { CString sValue; _variant_t vValue; vValue=m_pRst->GetFields()->GetItem((long)nCol)->Name; if(vValue.vt==VT_EMPTY||vValue.vt==VT_NULL) sValue=""; else sValue=(char*)(_bstr_t)vValue; sValue.TrimLeft(); sValue.TrimRight(); return sValue; } CString MyRecordSet::GetFieldString(CString strFieldName) { _variant_t strField=strFieldName; _variant_t var; try { var=m_pRst->GetCollect(strField); } catch(...) { AfxMessageBox("读取数据失败"); return ""; } return VariantToCString(var); } CString MyRecordSet::GetFieldString(int nCol) { _variant_t var; try { var=m_pRst->GetCollect((long)nCol); } catch(...) { AfxMessageBox("读取数据失败"); return ""; } return VariantToCString(var); } int MyRecordSet::GetFieldNumber(int nCol) { _variant_t var; try { var=m_pRst->GetCollect((long)nCol); } catch(...) { AfxMessageBox("读取数据失败"); return 0; } return (int)V_I2(&var); } int MyRecordSet::GetFieldNumber(CString strFieldName) { _variant_t strField=strFieldName; _variant_t var; try { var=m_pRst->GetCollect(strField); } catch(...) { AfxMessageBox("读取数据失败"); return 0; } return (int)V_I2(&var); } float MyRecordSet::GetFieldFloat(int nCol) { _variant_t var; try { var=m_pRst->GetCollect((long)nCol); } catch(...) { AfxMessageBox("读取数据失败"); return 0; } return (float)V_R4(&var); } float MyRecordSet::GetFieldFloat(CString strField) { _variant_t vField=strField; _variant_t var; try { var=m_pRst->GetCollect(vField); } catch(...) { AfxMessageBox("读取数据失败"); return 0; } return (float)V_R4(&var); } CString MyRecordSet::VariantToCString(VARIANT var) { CString strValue; _variant_t var_t; _bstr_t bst_t; time_t cur_time; CTime time_value; COleCurrency var_currency; switch(var.vt){ case VT_EMPTY:strValue=_T("");break; case VT_UI1:strValue.Format ("%d",var.bVal);break; case VT_I2:strValue.Format ("%d",var.iVal );break; case VT_I4:strValue.Format ("%d",var.lVal);break; case VT_R4:strValue.Format ("%f",var.fltVal);break; case VT_R8:strValue.Format ("%f",var.dblVal);break; case VT_CY: var_currency=var; strValue=var_currency.Format(0); break; case VT_BSTR: var_t=var; bst_t=var_t; strValue.Format ("%s",(const char*)bst_t); break; case VT_NULL:strValue=_T("");break; case VT_DATE: cur_time=var.date; time_value=cur_time; strValue=time_value.Format("%Y-%m-%d"); break; case VT_BOOL:strValue.Format ("%d",var.boolVal );break; default:strValue=_T("");break; } return strValue; } CString MyRecordSet::TimeToString(CTime time) { CString str; str=time.Format("%Y-%m-%d"); return str; } CTime MyRecordSet::StringToTime(CString str){ if(str.IsEmpty()) str="1990-1-1"; int y,m,d; y=atoi(str); int i,j; i=str.Find('-',0); j=str.Find('-',i+1); CString temp; while(i<j-1) temp+=str.GetAt(++i); m=atoi(temp); temp.Empty(); i=str.GetLength(); while(j<i-1) temp+=str.GetAt(++j); d=atoi(temp); CTime tmp(y,m,d,0,0,0); return tmp; }